/**
 *	21. 合并两个有序链表
 *	将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
*/

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    // 保护节点
    protect_node := &ListNode{0,nil}
    temp := protect_node
    // 遍历两个链表，比较两个链表的节点的大小，使temp.Next指向较小的节点
    for l1!=nil && l2!=nil {
        if l1.Val<l2.Val {
            temp.Next = l1
            l1 = l1.Next
        }else {
            temp.Next = l2
            l2 = l2.Next
        }
        temp=temp.Next
    }
    // 判断有没有不为空的链表
    // 如果有，是temp.Next直接指向不为空的链表
    if l1!=nil {
        temp.Next = l1
    }
    if l2 !=nil {
        temp.Next = l2
    }
    // 保护节点的next节点即是结果
    return protect_node.Next
}